package org.hard.model.create.builder;

import org.hard.model.create.builder.product.Car;

/**
 * @author: 王林博
 * @date: 2023年02月10日 15:04
 */
//具体生成器类将遵循生成器接口并提供生成步骤的具体实现。你的程序中可能会有多个以不同方式实现的生成器变体
public class CarBuilder implements Builder {


    Car car;

    // 一个新的生成器实例必须包含一个在后续组装过程中使用的空产品对象。
    CarBuilder() {
        this.reset();
    }

    // reset（重置）方法可清除正在生成的对象。
    @Override
    public void reset() {
        this.car = new Car();
    }

    // 所有生成步骤都会与同一个产品实例进行交互。
    @Override
    public void setSeats(String str) {
// 设置汽车座位的数量。
        this.car.setStr(str);
    }

    @Override
    public void setEngine() {
// 安装指定的引擎。
    }

    @Override
    public void setTripComputer() {
// 安装行车电脑。
    }

    @Override
    public void setGPS() {
// 安装全球定位系统。
    }
//具体生成器需要自行提供获取结果的方法。这是因为不同类型的生成器可能会创建不遵循相同接口的、完全不同的产品。所以也就无法在生成器接口中声明这些方法（至少在静态类型的编程语言中是这样的）。
    //通常在生成器实例将结果返回给客户端后，它们应该做好生成另一个产品的准备。因此生成器实例通常会在 `getProduct（获取产品）`方法主体末尾调用重置方法。但是该行为并不是必需的，你也可让生成器等待客户端明确调用重置方法后再去处理之前的结果。
    Car getProduct() {
        Car product = this.car;
        this.reset();
        return product;

    }
}
